/**
 * 该函数用于计算一个 DOM 区域 (region) 上特定对齐点 (align) 在页面中的绝对坐标。返回的对象包含 left（X 轴坐标）和 top（Y 轴坐标）值。
 * getAlignOffset是一个轻量级工具函数，通过区域尺寸和对齐规则快速计算目标点的页面绝对坐标。
 *
 * @param region: 一个对象，包含 left, top, width, height（分别表示区域的左上角坐标和宽高）
 * @param align: 一个字符串，由两个字符组成：第一个字符表示垂直对齐，第二个字符表示水平对齐。
 *                1. 垂直方向（第一个字符）：'t'：top（顶部对齐）;'c'：center（居中对齐）;'b'：bottom（底部对齐）
 *                2. 水平方向（第二个字符）：'l'：left（左对齐）;'c'：center（居中对齐）;'r'：right（右对齐）
 */
function getAlignOffset(region, align) {
  // 从 align 字符串中取出第一个字符（垂直对齐）和第二个字符（水平对齐）。
  const V = align.charAt(0);
  const H = align.charAt(1);
  // 初始化x为region.left，y为region.top（即区域的左上角坐标）。
  const w = region.width;
  const h = region.height;

  let x = region.left;
  let y = region.top;

  // 根据垂直对齐方式调整y坐标：如果是'c'（垂直居中），则y加上高度的一半（即y = region.top + region.height/2）。
  // 如果是'b'（底部对齐），则y加上整个高度（即y = region.top + region.height）。
  // 如果是't'（顶部对齐）则不做调整（因为初始的y就是顶部）。
  if (V === 'c') {
    y += h / 2;
  } else if (V === 'b') {
    y += h;
  }

  // 根据水平对齐方式调整x坐标：如果是'c'（水平居中），则x加上宽度的一半（即x = region.left + region.width/2）。
  // 如果是'r'（右对齐），则x加上整个宽度（即x = region.left + region.width）。
  // 如果是'l'（左对齐）则不做调整（因为初始的x就是左侧）。
  if (H === 'c') {
    x += w / 2;
  } else if (H === 'r') {
    x += w;
  }

  // 返回一个包含left（x坐标）和top（y坐标）的对象。
  return {
    left: x,
    top: y,
  };
}

export default getAlignOffset;
